package com.m2;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ReadExcelXlsx {

    public static void readExcel() {

        try {
            /**     *简单判断后缀名，如需通过文件流判断文件类型，
                         * 请调用getFileTypeByStream方法
                         * Excel( xls) 文件头：504B03
                         * Excel( xlsx) 文件头：D0CF11
                         * */
            File file = new File("D:/mDownloads/ChromeDown/E203_批发和零售财务状况.xlsx");

            Workbook book;
            Sheet sheet = null;
            InputStream inputStream = new FileInputStream(file);

            if (file.getPath().endsWith(".xls")) {  //后缀名xls的
                // 解析excel
                POIFSFileSystem pSystem = new POIFSFileSystem(inputStream);
                // 获取整个excel
                book = new HSSFWorkbook(pSystem);
                //获取第一个表单sheet
                sheet = book.getSheetAt(0);
            }
            if (file.getPath().endsWith(".xlsx")) {
                // 直接通过流获取整个excel
                book = new XSSFWorkbook(inputStream);
                // 获取第一个表单sheet
                sheet = book.getSheetAt(0);
            }
            if (sheet != null) {
                // 获取第一行
                int firstRow = sheet.getFirstRowNum();
                // 获取最后一行
                int lastRow = sheet.getLastRowNum();
                // 循环行数依次获取列数
                for (int i = firstRow; i < lastRow + 1; i++) {
                    // 获取第 i 行
                    Row row = sheet.getRow(i);
                    if (row != null) {
                        // 获取此行的第一列
                        int firstCell = 0;
                 /* *获取此行的存在数据的第一列
                  * int firstCell = row.getFirstCellNum(); * */
                        // 获取此行的存在数据的最后一列
                        int lastCell = row.getLastCellNum();
                        // 创建集合，保存每一行的每一列
                        List<String> list = new ArrayList<String>();
                        for (int j = firstCell; j < lastCell; j++) {
                            // 获取第 j 列
                            Cell cell = row.getCell(j);
                            if (cell != null) {
                                list.add(cell.toString());
                            } else {
                                list.add("");
                            }
                        }
                        System.out.println(list);
                    }
                }
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        readExcel();
    }
}
